package com.financing.wap.service;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.financing.wap.common.Pager;
import com.financing.wap.dto.MailRecordDTO;
import com.financing.wap.dto.ProductAttachmentDTO;
import com.financing.wap.dto.ProductBasicInfoDTO;
import com.financing.wap.dto.ProductDTO;
import com.financing.wap.dto.ProductDetailPageDTO;
import com.financing.wap.dto.ProductRecommendDTO;
import com.financing.wap.dto.ProjectAccountDTO;
import com.financing.wap.dto.UserDTO;
import com.financing.wap.vo.ProductAppointmentVO;
import com.financing.wap.vo.ProductProfitAndRebateVO;

/**
 * 产品查询借口
 * @author hetaihe
 *
 */
public interface IProductService {
	
	public List<ProductDTO> getProductList(Map<String,Object> queryParams, UserDTO user, Pager pager) throws Exception;
	
	public List<ProductDTO> getProductByType(Map<String,Object> queryParams) throws Exception;

	
	public int getProductListCount(Map<String,Object> queryParams, UserDTO user);
	/**
	 * 获得精品推荐产品（只推荐一个精品)
	 * 如果没有推荐， 取最新产品
	 * @return
	 */
	public List<ProductDetailPageDTO>  getRecommendProduct(Map<String,Object> parames);
	
	/**
	 * 产品信息
	 * @param productId
	 * @return
	 * @throws Exception 
	 */
	public ProductDetailPageDTO getProductDetailView(Integer productId) throws Exception;

	/**
	 * 产品信息-单表信息
	 * @param productId
	 * @return
	 * @throws Exception
	 */
	public ProductDetailPageDTO getProductView(Integer productId) throws Exception;
	
	/**
	 * 产品信息(包括销售、核心、成本)
	 * @param productId
	 * @return
	 */
	public ProductDetailPageDTO getProductDetailViewByprice(Integer productId) ;
	

	/**
	 * 计算订单预约和签约数appointmen
	 * @param productId
	 */
	public ProductAppointmentVO calcProductAppointmenAndSigning(Integer productId);
	
	/**
	 * 获得产品收益表
	 * @param productId
	 * @return
	 */
	public List<ProductProfitAndRebateVO> getProductProfitAndRebateList(Integer productId,String corpType);
	
	public Integer getProductIdByProductCode(String productCode);
	
	/**
	 * 
	* @Title: queryProjectAccount 
	* @Description: 查询产品募集账号信息
	* @param   projectId
	* @return List<ProjectAccountDTO>   
	* @throws
	 */
	public List<ProjectAccountDTO> queryProjectAccount(int projectId);
	
	/**
	 * 获取产品附件
	 * @return
	 */
	public List<ProductAttachmentDTO> getProductAttachments(ProductAttachmentDTO a);
	
	/**
	 * 邮件分享记录表
	 * @return
	 */
	public Integer insertMailRecord(MailRecordDTO  mailRecordDTO);
	
	/**
	 * 产品网站地图
	 * @return
	 */
	public List<Map> querySiteMapProjectList();
	
	/**
	 * 私募网站地图
	 * @return
	 */
	public List<Map> querySiteMapFundList();
	
	/**
	 * 活动网站地图
	 * @return
	 */
	public List<Map> querySiteMapActivitiesList();
	
	/**
	 * 信托公司网站地图
	 * @return
	 */
	public List<Map> querySiteMapProjectCompanyList();

	/**
	 * 产品数量统计
	 * @return
	 */
	public Map<String, Integer> queryProjectAmountCount();
	
	/**
	 * PEVC 产品列表count
	 * @param productVO
	 * @return
	 */
	public int getProductPEVCListCount(Map<String,Object> params);

	/**PEVC 产品列表
	 * @param params
	 * @return
	 * @throws Exception 
	 */
	public List<ProductDTO> getProductPEVCList(Map<String, Object> params) throws Exception;

	public List<ProductDTO> getProductName();

	public Boolean queryProductSubBypId(Map<String, Object> params);
	
	public List<Map<String, Object>> getMediaSourceProduct(Map<String,Object> map) throws SQLException;

	public List<ProductRecommendDTO> getRecommendFundProduct();
	
	public ProductDetailPageDTO getProductDetailPage(Integer productId) throws Exception;
	/**
	 * 根据产品code 获取产品基本信息
	 */
	public ProductBasicInfoDTO queryBasicInfo(String code);
	/**
	 * 根据产品code 获取产品基本信息  不过滤状态
	 */
	public ProductBasicInfoDTO queryAllProductBasicInfo(String code);

	public List<ProductDTO> getRecommendProductForProductInfo(Map<String, Object> map)throws Exception;

	public String getProductNameByProductCode(String param);
}
